home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 1997 April to September / Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso / products / bin / httpd / Solaris_2 / AT-admin.cgi < prev    next >
Text File  |  1997-02-25  |  20KB  |  641 lines

  1. #!/bin/sh
  2. perl=/tmp/httpd/.excite/perl
  3. eval "exec $perl -x $0 $*"
  4. #!perl
  5. ## Copyright (c) 1996 Excite, Inc.
  6. ##
  7. ## This CGI script is intended as a first stop for
  8. ## administrators of Excite, Inc.'s web site search engine.
  9. ##
  10. ## This script will appear a several different web pages,
  11. ## and will check to make sure that the user has
  12. ## registered with Excite, Inc. before providing access
  13. ## to the full range of functionality.
  14.  
  15. BEGIN {
  16.   $root = "/tmp/httpd/.excite";
  17.   die "Invalid root directory '$root'\n" unless -d $root;
  18.   unshift(@INC, "$root/perllib");
  19. }
  20.  
  21.  
  22. $| = 1;
  23. require 'os_functions.pl';
  24. require 'architext.pl';
  25. require 'architextConf.pl';
  26.  
  27. %form = &Architext'readFormArgs;
  28. %attr = &ArchitextConf'readConfig("$root/Architext.conf", $form{'db'});
  29.  
  30. if (&Architext'remoteMode($root)) {
  31.     $helppath = &Architext'helpPath();
  32. } else {
  33.     $helppath = $attr{'ArchitextURL'};
  34. }
  35.  
  36. $script_suffix = &Architext'scriptSuffix();
  37. $news_url = &Architext'newsURL();
  38. $scriptname = "AT-admin$script_suffix";
  39.  
  40. if ($form{'Version'}) {
  41.     print "Content-type: text/html\n\n"; 
  42.     $version = &Architext'productVersion();
  43.     print "$version\n";
  44.     exit(0);
  45. }
  46.  
  47. if ($form{'register'} eq 'yes') {
  48.     ## given the presence of the register attribute
  49.     ## we can assume that the user has registered with
  50.     ## Excite, Inc. and is visiting this page for the
  51.     ## first time, so we need to update Architext.conf
  52.     ## to mark the user as registered.
  53.        $exit = &append_line_to_file("$attr{'ArchitextRoot'}/Architext.conf",
  54.                     "register yes") unless ($attr{'register'});
  55.        &Architext'exitError($attr{'ArchitextURL'},
  56.                 "Unable to update configuration file with registation information. $!") if $exit;
  57.     if ($form{'remote'} eq 'yes') {
  58.         $exit = &create_empty_file("$attr{'ArchitextRoot'}/.remote")
  59.         unless (-e "$attr{'ArchitextRoot'}/.remote");
  60.         &Architext'exitError($attr{'ArchitextURL'},
  61.                  "Unable to create .remote file - $!") 
  62.         if $exit;
  63.     }
  64.     if ($form{'at_email'}) {
  65.         $exit =
  66.         &append_line_to_file("$attr{'ArchitextRoot'}/Architext.conf",
  67.                      "AdminMail $form{'at_email'}") 
  68.             unless ($attr{'AdminMail'});
  69.         &Architext'exitError($attr{'ArchitextURL'},
  70.                  "Unable to update configuration file with admin mail address. $!") if $exit;
  71.     }
  72.     ## create index.html file with some interesting stuff in it
  73.     %attr = &ArchitextConf'readConfig("$root/Architext.conf");    
  74.     &createIndex($attr{'ConfigRoot'});
  75.     
  76.     ## add ServerName, ServerPort, and ServerCgi to .conf file
  77.     &append_line_to_file("$root/Architext.conf", 
  78.                  "ServerName $ENV{'SERVER_NAME'}");
  79.     &append_line_to_file("$root/Architext.conf", 
  80.              "ServerPort $ENV{'SERVER_PORT'}");
  81.     $server_cgi = $ENV{'SCRIPT_NAME'};
  82.     $server_cgi =~ s/[^\/]+$//;
  83.     $server_cgi =~ s/\/$//;
  84.     &append_line_to_file("$root/Architext.conf", 
  85.                  "ServerCgi $server_cgi");
  86.  
  87.  
  88. }
  89.  
  90. ## check for password, if one is specified in Architext.conf
  91. ## if it doesn't appear as a form arg, present password page
  92. if ($attr{'register'} =~ /yes/) {
  93.     ## they are registered, so present them with the options
  94.     ## and check for an admin password
  95.     $password = &Architext'password($attr{'ArchitextURL'},
  96.                     $scriptname,
  97.                     $attr{'Password'}, 
  98.                     %form) if $attr{'Password'};
  99.     
  100.     $postpass = 
  101.     "<INPUT TYPE=\"hidden\" NAME=\"$password\" VALUE=\"$attr{'Password'}\">"
  102.         if ($attr{'Password'}); 
  103.     $getpass = "$password=$attr{'Password'}" if $postpass;
  104.     $getpass = "?" . &Architext'httpize($getpass);
  105.  
  106.     &createLocalSpiderFile();
  107.  
  108.     ## allow user to setup file to URL mappings
  109.     if ($form{'Mappings'} eq 'admin') {
  110.     &Architext'printHeader($attr{'ArchitextURL'}, 
  111.                    "Configure URL Mappings");
  112.     $htroot = $attr{'HtmlRoot'};
  113.     $htroot .= "/" unless ($htroot =~ /[\/\\]$/);
  114.     print "<b>Default Mapping: </b>";
  115.     print "<ul>URL prefix '/' <b>maps to filesystem directory</b> '$htroot'</ul>";
  116.     print "<b>Additional Mappings: </b><ul>";
  117.     print "<FORM METHOD=\"POST\" ACTION=\"AT-admin$script_suffix\">";
  118.     print "<TEXTAREA name=\"maps\" ROWS=\"10\" COLS=\"50\">";
  119.     if (-e "$root/url.map") {
  120.         open(MFILE, "$root/url.map") ||
  121.         &Architext'exitFileError($attr{'ArchitextURL'},
  122.                      "$root/url.map",
  123.                      "could not be opened for reading.");
  124.             while (<MFILE>) {
  125.         print;
  126.             }
  127.         close(MFILE);
  128.     }
  129.     print <<EOF;
  130. </TEXTAREA><br>
  131. Enter the mappings in the box above with one mapping per line.
  132. The first column is the URL prefix, while the second column is the
  133. directory in the file system that your Web server looks in when serving
  134. URLs with the appropriate prefix in the first column.
  135. $postpass</ul>
  136. <INPUT TYPE="hidden" NAME="Mappings" VALUE="save">
  137. <INPUT TYPE="submit" VALUE="Save Mappings">
  138. Save the mappings described above.
  139. </FORM>
  140. <br>
  141. <FORM ACTION="AT-admin.cgi" METHOD="POST">
  142. $postpass
  143. <INPUT TYPE="submit" VALUE="Main Admin Page">
  144. Don't save, go back to the main administration page.
  145. </FORM>
  146. EOF
  147.     ;
  148.     
  149.     &Architext'Copyright($attr{'ArchitextURL'});
  150.     exit(0);
  151.     }
  152.     if ($form{'Mappings'} eq 'save') {
  153.     &Architext'printHeader($attr{'ArchitextURL'}, 
  154.                    "Save URL Mappings", " ");
  155.     ##write the mappings to the URL mapping file, and make sure
  156.     ##the format is cool
  157.     unlink("$root/url.map");
  158.     open(MFILE, ">$root/url.map") ||
  159.         &Architext'exitFileError($attr{'ArchitextURL'},
  160.                      "$root/url.map",
  161.                      "could not be opened for writing.");
  162.     @maps = split('\s+', $form{'maps'});
  163.     while ($file = pop(@maps)) {
  164.         $url = pop(@maps);
  165.         $file .= "/" unless ($file =~ /[\/\\]$/);
  166.         $url .= "/" unless ($url =~ /[\/\\]$/);
  167.         print MFILE "$url\t$file\n";
  168.     }
  169.     close(MFILE) ||
  170.         &Architext'exitError($attr{'ArchitextURL'},    
  171.                  "Error writing to file '$root/url.map'");
  172.     print <<EOF;
  173. <h2> Update of URL Mappings was successful.</h2>
  174. <p>
  175. <FORM ACTION="AT-admin.cgi" METHOD="POST">
  176. $postpass
  177. <INPUT TYPE="submit" VALUE="Main Admin Page">
  178. Go back to the main administration page.
  179. </FORM>
  180. EOF
  181.     ;
  182.     &Architext'Copyright($attr{'ArchitextURL'});
  183.     exit(0);
  184.     }
  185.     if ($form{'Mappings'} eq 'seed') {
  186.     &Architext'printHeader($attr{'ArchitextURL'}, 
  187.                    "Configure URL Mappings", " ");
  188.     &Architext'Copyright($attr{'ArchitextURL'});
  189.     exit(0);
  190.     }
  191.  
  192.     if ($form{'db'}) {
  193.     ## db specific admin page
  194.     &Architext'printHeader($attr{'ArchitextURL'}, 
  195.                    "Collection Administration: $form{'db'}");
  196.     print "<hr><b>Collection Status</b><ul>";
  197.     &Architext'printStatus($form{'db'}, $root, $attr{'ConfigRoot'},
  198.                    $attr{'ArchitextURL'}, $helppath,
  199.                    $attr{'CollectionRoot'},
  200.                    $attr{'CgiBin'}, $getpass);
  201.     print <<EOF;
  202. <p><FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  203. <INPUT TYPE="submit" VALUE="Update Status">
  204. Check status information again, in case it has changed.
  205. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  206. $postpass
  207. </FORM><BR>
  208. EOF
  209.     ;
  210.     print "</ul><hr>";
  211.     print <<EOF;
  212. <b>Possible Actions</b><ul>
  213.  
  214. <FORM ACTION="AT-config$script_suffix" METHOD="POST">
  215. <INPUT TYPE="submit" VALUE="Configure"> 
  216. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  217. Configure the characteristics of this document collection.  
  218. $postpass
  219. </FORM><BR>
  220. EOF
  221.     ;
  222.     ## show index or stop index button appropriately
  223.     if (-e "$root/collections/$form{'db'}.pid") {
  224.         print <<EOF;
  225. <FORM ACTION="AT-index$script_suffix" METHOD=POST>
  226. <INPUT TYPE="submit" NAME="Stop" VALUE="Stop Indexing">
  227. Stop the indexing process that is currently running on this collection.
  228. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  229. $postpass
  230. </FORM><BR>
  231. EOF
  232.     ;
  233.     } else {
  234.         print <<EOF;
  235. <FORM ACTION="AT-index$script_suffix" METHOD="POST">
  236. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  237. <INPUT TYPE="submit" VALUE="Index"> 
  238. Create an index for this collection.
  239. $postpass
  240. </FORM><BR>
  241. EOF
  242.     ;
  243.     }
  244.  
  245.     print <<EOF;
  246.  
  247. <FORM ACTION="AT-generate$script_suffix" METHOD="POST">
  248. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  249. <INPUT TYPE="submit" VALUE="Generate"> Generate the pages
  250. needed to search on this collection.
  251. $postpass
  252. </FORM><BR>
  253. EOF
  254.     ;
  255.     if (-e "$attr{'ConfigRoot'}/AT-$form{'db'}query.html") {
  256.         print <<EOF;    
  257. <FORM ACTION="$attr{'ArchitextURL'}AT-$form{'db'}query.html" METHOD="GET">
  258. <INPUT TYPE="submit" VALUE="Search">
  259. Make a query on this collection.
  260. </FORM><BR>
  261. EOF
  262.     ;
  263.     }            
  264.     if ((-e "$root/collections/$form{'db'}.pid") ||
  265.     (-e "$root/collections/$form{'db'}.last") ||
  266.     (-e "$root/collections/$form{'db'}.err")) {
  267.     print <<EOF;
  268. <p> <FORM ACTION="AT-generate$script_suffix" METHOD=POST>
  269. <INPUT TYPE="submit" NAME="Status" VALUE="View Logs">
  270. View the log files from the most recent indexing process.
  271. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'db'}">
  272. $postpass
  273. </FORM><BR>
  274. EOF
  275.     ;
  276.  
  277.     }
  278.     print <<EOF;
  279. <FORM ACTION="AT-admin$script_suffix" METHOD="POST">
  280. <INPUT TYPE="hidden" NAME="dbname" VALUE="$form{'db'}">
  281. <INPUT TYPE="hidden" NAME="Remove" VALUE="Remove">
  282. <INPUT TYPE="submit" VALUE="Remove">
  283. Remove this collection and all files associated with it.
  284. $postpass
  285. </FORM><BR>
  286. <FORM ACTION="AT-admin$script_suffix" METHOD="POST">
  287. <INPUT TYPE="submit" VALUE="Main Admin Page">
  288. Go back to the main administration page.
  289. $postpass
  290. </FORM><BR>
  291. EOF
  292. ;
  293.     print "</ul>";
  294.     print "<hr><b>Collection Characteristics</b>\n";
  295.     &Architext'collectionCharacteristics($form{'db'}, $helppath, %attr); 
  296.     } elsif ($form{'Support'} && (! $form{'Confirm'})) {
  297.     ## get confirmation and problem description from user 
  298.     ## before actually generating info
  299.     &Architext'printHeader($attr{'ArchitextURL'}, 
  300.                    "Create Support Information");
  301.  
  302.     print <<EOF;
  303. <p> If you are having a problem with this software, you can use
  304. this form to mail a message to excite that will contain a
  305. description of the problem and some additional information that
  306. might be useful in diagnosing your problem.
  307. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  308. $postpass
  309. <INPUT TYPE="checkbox" NAME="email" VALUE="email" CHECKED>
  310. Send support information to <b>ewssupport\@excite.com</b>.  If you do not
  311. want the information automatically emailed to excite, uncheck this
  312. box, and a file containing the support information will be created, but
  313. not emailed.
  314. <p>
  315. Please describe the problem you are having in the space provided below:<br>
  316. <TEXTAREA NAME="Description" ROWS=6 COLS=80></TEXTAREA>
  317. <p> Provide an email address for correspondence:
  318. <INPUT NAME="Email" VALUE="$attr{'AdminMail'}" SIZE=40>
  319. <INPUT TYPE="hidden" NAME="Confirm" VALUE="Confirm">
  320. <INPUT TYPE="hidden" NAME="Support" VALUE="Support">
  321. <p><INPUT TYPE="submit" VALUE="Support"> OK, send the information.
  322. </FORM>
  323. <p><FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  324. $postpass
  325. <INPUT TYPE="submit" VALUE="Cancel"> Go back to the main administration page.
  326. </FORM><BR>
  327. EOF
  328.     ;
  329.     &Architext'Copyright($attr{'ArchitextURL'});
  330.     exit 0;            
  331.     } elsif ($form{'Support'} && $form{'Confirm'}) {
  332.         ## send support information to Architext
  333.     &Architext'printHeader($attr{'ArchitextURL'}, 
  334.                    "Done Creating Support Information");
  335.     $version = &Architext'productVersion();
  336.     &create_support_info($root, $attr{'ConfigRoot'}, $version, 
  337.                  $form{'email'}, $form{'Description'});
  338.     if ($form{'email'}) {
  339.         $email = 
  340.         ", and has been sent via email to <b>ewssupport\@excite.com</b>.";
  341.     } else {
  342.         $email = ".";
  343.     }            
  344.  
  345.     print <<EOF;
  346.  
  347. <p> Your support information has been recorded in the file
  348. <b>$root/support.out</b>$email  If your system is not configured to send email
  349. to outside locations, please send the contents of the above file
  350. to ewssupport\@excite.com.  Thank you.
  351. <p>
  352. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  353. $postpass
  354. <INPUT TYPE="submit" NAME="GoBack" VALUE="Back To Main Admin Page">
  355. </FORM><BR>
  356. EOF
  357.     ;
  358.     &Architext'Copyright($attr{'ArchitextURL'});
  359.     exit 0;
  360.     } elsif ($form{'Remove'}) {
  361.     ## remove collection verb
  362.     &Architext'printHeader($attr{'ArchitextURL'},
  363.                    "Remove Collection: $form{'dbname'}");
  364.     if ($form{'verify'}) {
  365.         if (-e "$root/collections/$form{'dbname'}.pid") {
  366.         print "<p><b>Sorry, you cannot remove a collection while an index process is running for that collection</b>";
  367.         } else {
  368.         ## no index process is running, so it is safe to
  369.         ## remove the collection and all associated files
  370.         %attr = &ArchitextConf'readConfig("$root/Architext.conf", 
  371.                           $form{'dbname'});
  372.         &remove_collection($form{'dbname'}, $root, 
  373.                    $attr{'ConfigRoot'},
  374.                    $attr{'CollectionRoot'},
  375.                    $attr{'CgiBin'});
  376.         print "<p><b>The collection '$form{'dbname'}' has been removed</b>.";
  377.         }
  378.         print <<EOF;
  379. <p>
  380. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  381. $postpass
  382. <INPUT TYPE="submit" VALUE="Admin">
  383. Go back to the main administration page.
  384. </FORM><BR>
  385. EOF
  386.     ;
  387.  
  388.     } else {
  389.         print <<EOF;
  390. Do you really want to remove the configure files, index files, and 
  391. query scripts associated with this collection?
  392. <p>
  393. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  394. <INPUT TYPE="hidden" NAME="verify" VALUE="yes">
  395. <INPUT TYPE="hidden" NAME="Remove" VALUE="Remove">
  396. <INPUT TYPE="hidden" NAME="dbname" VALUE="$form{'dbname'}">
  397. $postpass
  398. <INPUT TYPE="submit" VALUE="Remove">
  399. Remove all files associated with this collection.
  400. </FORM>
  401.  
  402. <p>
  403. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  404. <INPUT TYPE="hidden" NAME="db" VALUE="$form{'dbname'}">
  405. $postpass
  406. <INPUT TYPE="submit" VALUE="Admin">
  407. Don't remove files, go back to the administration page for this collection.
  408. </FORM><BR>
  409. EOF
  410.     ;
  411.  
  412.     }
  413.     &Architext'Copyright($attr{'ArchitextURL'});
  414.     exit(0);
  415.     } elsif ($form{'automate'}) {
  416.     &Architext'printHeader($attr{'ArchitextURL'}, 
  417.                    "Indexing Automation");
  418.  
  419.     open(AUTO, "$root/AT-automate.html");
  420.     while (<AUTO>) {
  421.         print;
  422.     }
  423.     close(AUTO);
  424.     print <<EOF;
  425. <hr>
  426. <b>Next step:</b>
  427. <FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  428. $postpass
  429. <INPUT TYPE="submit" VALUE="Admin">
  430. Go back to the main administration page.
  431. EOF
  432.     ;
  433.     &Architext'Copyright($attr{'ArchitextURL'});
  434.     exit(0);
  435.     } else {
  436.     ## main admin page
  437.     &Architext'printHeader($attr{'ArchitextURL'},
  438.                    "Excite for Web Servers Administration", " ");
  439.     opendir(CONF, "$root/collections");
  440.     @dbconf = grep(/\.conf$/, readdir(CONF));
  441.  
  442.     %pubs = &Architext'pubList("$root/collections") 
  443.         if (&Architext'notifyMode());
  444.  
  445.     print "<b>Existing <a href=\"${helppath}AT-helpdoc.html#Document Collections\">Document Collections</a></b><ul>";
  446.     
  447.     if ($#dbconf > -1) {
  448.         for (@dbconf) {
  449.         s|\.conf$||;
  450.         if ($getpass) {
  451.             $getdb = "&db=$_";
  452.         } else {
  453.             $getdb = "?db=$_";
  454.         }
  455.  
  456.                 $notify_icon = &Architext'notifyBlankTag($attr{'ArchitextURL'});
  457.                 $notify_icon = &Architext'notifyTag($attr{'ArchitextURL'})
  458.                   if $pubs{$_}; 
  459.  
  460.         print qq(<br>$notify_icon <a href="AT-admin$script_suffix$getpass$getdb">$_</a>\n);
  461.         $status = &Architext'getStatusString($root, $_, 
  462.                              $attr{'ConfigRoot'},
  463.                              $attr{'ArchitextURL'},
  464.                              $attr{'CgiBin'},
  465.                              $getpass);
  466.         print " -- $status \n";
  467.         }
  468.         print "</ul>";
  469.         ## if use of notfier is enabled, present options
  470.         ## to publish or unpublish a collection
  471.         if (&Architext'notifyMode()) {
  472.         $notify_icon = &Architext'notifyTag($attr{'ArchitextURL'});
  473.         print <<EOF;
  474. <p><b>Collections marked with a $notify_icon are excite <a href=\"${helppath}AT-helpdoc.html#Notifier\">notifier</a> enabled.</b>
  475.  
  476. EOF
  477.     ;
  478.         }
  479.  
  480.     } else {
  481.         print "<p>(No document collections found)<p></ul>\n";
  482.     }
  483.     print "<hr>";
  484.     print "<b><a href=\"${helppath}AT-helpdoc.html#New Collection\">New Collection</a></b><ul>";
  485.     print <<EOF;
  486. <p><FORM ACTION="AT-config$script_suffix" METHOD=POST>
  487. Enter a name for a new collection:
  488. <INPUT NAME="new" SIZE=20><br>
  489. <INPUT TYPE="submit" NAME="NewCollection" VALUE="Create New Collection">
  490. <INPUT TYPE="hidden" NAME="admin" VALUE="admin">
  491. $postpass
  492. </FORM><BR>
  493. EOF
  494.     ;
  495.  
  496.     print "</ul><hr>";
  497.  
  498.     print "<b> <a href=\"${helppath}AT-helpdoc.html#Support Information\">Support Information </a> </b>"; 
  499.     print "<ul>";
  500. print <<EOF;
  501. <p><FORM ACTION="AT-admin$script_suffix" METHOD=POST>
  502. $postpass
  503. <INPUT TYPE="submit" NAME="Button" VALUE="Create Support Information">
  504. <INPUT TYPE="hidden" NAME="Support" VALUE="Support">
  505. Click here to provide Excite with support information.
  506. </FORM></ul><hr>
  507. <b> <a href="${helppath}AT-helpdoc.html#Changing the Password">
  508. New Password </a> </b><ul>
  509. <FORM ACTION="AT-config$script_suffix" METHOD="POST">
  510. <INPUT TYPE="hidden" NAME="ChangePassword" VALUE="yes">
  511. <INPUT TYPE="hidden" NAME="first" VALUE="yes">
  512. <INPUT TYPE="submit" VALUE="Password">
  513. Change the password used to access this page.
  514. $postpass
  515. </FORM>
  516. </ul>
  517. <hr>
  518. <b> <a href="${helppath}AT-helpdoc.html#Configuring URL Mappings">
  519. Configure URL Mappings </a> </b><ul>
  520. <FORM ACTION="AT-admin$script_suffix" METHOD="POST">
  521. <INPUT TYPE="hidden" NAME="Mappings" VALUE="admin">
  522. <INPUT TYPE="hidden" NAME="first" VALUE="yes">
  523. <INPUT TYPE="submit" VALUE="Configure URL Mappings">
  524. Change, add, or remove URL to filename mappings.
  525. $postpass
  526. </FORM>
  527. </ul>
  528. EOF
  529.     ;
  530.        
  531.     if ($getpass) {
  532.         $amper = '&';
  533.     } else {
  534.         $amper = '?';
  535.     }
  536.     if (!($ews_port eq 'NT')) {
  537.     print <<EOF;        
  538. <hr>
  539. <a href="AT-admin$script_suffix$getpass${amper}automate=automate"><b>Automation Information</b>
  540. </a> Click here for information about scheduling a recurring indexing
  541. process. 
  542.  
  543. EOF
  544.     ;
  545.     }
  546.     print <<EOF;        
  547. <hr>
  548. <a href="$news_url">
  549. News</a> Check here for up-to-the-minute information about Excite for Web Servers.
  550. <hr>
  551. <a href="$attr{'ArchitextURL'}AT-admininfo.html">
  552. Admin Info Page.</a>  This page is simply
  553. a list of the options you chose at install time; you
  554. can check here to find out where certain files are located in
  555. case you have forgotten. 
  556. EOF
  557.     ;
  558.     &Architext'Copyright($attr{'ArchitextURL'});
  559.     exit 0;
  560.     }
  561.  
  562.  
  563.  
  564. } else {
  565.     ## not yet registered, so print out screen to send user
  566.     ## back to AT-starthere.html to get them registered and
  567.     ## happy before they start using the admin tools
  568.     &Architext'printHeader($attr{'ArchitextURL'}, 
  569.                "Excite for Web Servers Administration");
  570.     print <<EOF;
  571. <p><h1> Not yet registered. </h1>
  572. <p>  Apparently, you have not yet registered your copy of
  573. this software with Excite, Inc.  To do this, please go to the
  574. <a href="AT-start$script_suffix">getting started</a>
  575. page and follow the instructions presented there. <br>
  576. Thanks!<br>
  577. EOF
  578. ;
  579. }
  580.  
  581. &Architext'Copyright($attr{'ArchitextURL'});
  582.  
  583.  
  584. sub createIndex {
  585.     local($location) = @_;
  586.     open(INDEX, ">$location/index.html");
  587.     print INDEX qq(<html><head><title>Excite for Web Servers Administration</title></head>);
  588.     $banner = &Architext'adminBanner();
  589.     print INDEX qq(<body><h1><img src="pictures/$banner">);
  590.     print INDEX qq(<p>Excite for Web Servers</h1>);
  591.     print INDEX qq(<p> Welcome to the Excite for Web Servers administration directory.\n);
  592.     print INDEX qq(From here, you can:); 
  593.     print INDEX qq(<p> Go to the <a href="$ENV{'SCRIPT_NAME'}"> main\n);
  594.     print INDEX qq(administration page</a>.<br>\n);
  595.     print INDEX qq(Go to the <a href="http://www.atext.com">Excite, Inc.);
  596.     print INDEX qq(</a> home page);
  597.     print INDEX qq(<p><p><b>TIP:</b> Make a bookmark for this page, so you can easily get back to the administration page.);
  598.     close(INDEX);
  599.     &make_files_readwriteable("$location/index.html");
  600. }
  601.  
  602.  
  603. sub createLocalSpiderFile {
  604.     return if (-e "$root/.first");
  605.     ## create a file for local spiders to find
  606.     $server_cgi = $ENV{'SCRIPT_NAME'};
  607.     $server_cgi =~ s/[^\/]+$//;
  608.     $server_cgi =~ s/\/$//;
  609.         open(LSF, ">$root/ews");
  610.         print LSF "$server_cgi\n####EXCLUSIONS####\n";
  611.         close(LSF);
  612.         if (-e "$attr{'HtmlRoot'}/ews") {
  613.           open(TMP, "$attr{'HtmlRoot'}/ews");          
  614.           $hasit = 0;
  615.           while ($str = <TMP>) {
  616.             last if ($str =~ /####EXCLUSIONS####/);
  617.             if ($str eq $server_cgi) {
  618.               $hasit = 1;
  619.               last;
  620.             }
  621.           } 
  622.           close(TMP);
  623.           if (!$hasit) {
  624.             rename("$attr{'HtmlRoot'}/ews", "$attr{'HtmlRoot'}/ews.old");
  625.             open(TMP, "$attr{'HtmlRoot'}/ews.old");                      
  626.             open(NTMP, ">$attr{'HtmlRoot'}/ews");                      
  627.             print NTMP "$server_cgi\n";
  628.             while ($str = <TMP>) {
  629.               print NTMP $str;
  630.             }
  631.             close(NTMP);        
  632.             close(TMP);
  633.             unlink "$attr{'HtmlRoot'}/ews.old";
  634.           }
  635.         }
  636.         else {
  637.           ©_files("$root/ews", "$attr{'HtmlRoot'}/ews");
  638.         }
  639.     &create_empty_file("$root/.first") unless (-e "$root/.first");    
  640. }
  641.